package com.example.cloud_disk.controller.user;


import cn.mybatis.mp.core.mybatis.mapper.context.Pager;
import com.example.cloud_disk.dto.GetFilesPageDTO;
import com.example.cloud_disk.dto.PutPassword;
import com.example.cloud_disk.dto.UpDataUser;
import com.example.cloud_disk.dto.UserLoginDTO;
import com.example.cloud_disk.entity.Files;
import com.example.cloud_disk.pojo.Result;
import com.example.cloud_disk.service.UsersService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.net.URISyntaxException;

/**
 * @author majun
 * @package com.example.cloud_disk.controller.user
 * @date 2024/10/30 20:26
 */

@RestController
@RequestMapping("/user")
@Slf4j
public class UserController {

    @Autowired
    private UsersService usersService;

    /**
     * 用户登录
     *
     * @param userLoginDTO
     * @return
     */
    @PostMapping("/login")
    public Result login(@RequestBody UserLoginDTO userLoginDTO) {

        log.info("用户登录:{}", userLoginDTO);

        String a = usersService.login(userLoginDTO);

        if (isChinese(a)) {
            return Result.error(a);
        } else {
            return Result.success(a);
        }

    }

    /**
     * 用户修改基本信息
     *
     * @param upDataUser
     * @param token
     * @return
     */
    @PostMapping("/upDataUser")
    public Result upDataUser(@RequestBody UpDataUser upDataUser, @RequestHeader("Authorization") String token) {

        log.info("用户修改信息：:{}", upDataUser);

        String a = usersService.upDataUser(upDataUser, token);

        return Result.success(a);

    }

    /**
     * 文件上传
     *
     * @param file
     * @return
     */
    @PostMapping("/upFiles")
    public Result upFiles(@RequestParam("file") MultipartFile file) throws InterruptedException, IOException, URISyntaxException {

        log.info("文件上传:{}", file);

        String a = usersService.upFiles(file);

        return Result.success(a);

    }

    /**
     * 用户文件分页及模糊查询
     *
     * @return
     */
    @PostMapping("/getPageUsersFile")
    public Result<Pager<Files>> getPageUsersFile(@RequestBody GetFilesPageDTO getFilesPageDTO) {

        log.info("用户文件分页查询");

        Pager<Files> pager = usersService.getPageUsersFile(getFilesPageDTO);

        return Result.success(pager);

    }

    /**
     * 用户文件下载
     *
     * @param id
     * @return
     */
    @PostMapping("/fileDown")
    public Result fileDown(String id) throws URISyntaxException, IOException {

        log.info("用户文件下载:{}", id);

        String a = usersService.fileDown(id);

        return Result.success(a);

    }

    /**
     * 用户文件删除
     *
     * @param id
     * @return
     */
    @PostMapping("/fileDel")
    public Result fileDel(String id) throws IOException, InterruptedException {

        log.info("用户文件删除:{}", id);

        String a = usersService.fileDel(id);

        return Result.success(a);

    }

    /**
     * 用户修改密码
     *
     * @param putPassword
     * @param token
     * @return
     */
    @PostMapping("/putUserPassword")
    public Result putUserPassword(@RequestBody PutPassword putPassword, @RequestHeader("Authorization") String token) {

        log.info("用户修改密码:{}", putPassword);

        String a = usersService.putUserPassword(putPassword, token);

        return Result.success(a);

    }

    public boolean isChinese(String str) {
        return str.matches("[\\u4e00-\\u9fa5]+");
    }

}
